package com.wsoft.hr.pm.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.wsoft.hr.pm.entity.HrPmTargetEntity;
import com.wsoft.hr.pm.query.target.TargetExportQuery;
import com.wsoft.hr.pm.query.target.TargetInsertQuery;
import com.wsoft.hr.pm.query.target.TargetListQuery;
import com.wsoft.hr.pm.query.target.TargetUpdateQuery;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.List;

/**
 * <p>
 * 指标库 服务类
 * </p>
 *
 * @author Z001
 * @since 2025年02月18日 09:04:55
 */
public interface IHrPmTargetService extends IService<HrPmTargetEntity> {

    /**
     * 新增指标
     * @param query
     * @param isSubmit
     * @return
     */
    boolean insertTarget(TargetInsertQuery query,boolean isSubmit);

    /**
     * 个人指标新增
     * @param query
     * @return
     */
    HrPmTargetEntity personTargetInsert(TargetInsertQuery query);

    /**
     * 编辑指标
     * @param query
     * @param isSubmit
     * @return
     */
    boolean updateTarget(TargetUpdateQuery query,boolean isSubmit);

    /**
     * 个人指标修改
     * @param query
     * @return
     */
    boolean personTargetUpdate(TargetUpdateQuery query);

    /**
     * 指标详情
     * @param id
     * @return
     */
    HrPmTargetEntity getTargetInfo(Long id);

    /**
     * 个人指标详情
     * @param id
     * @return
     */
    HrPmTargetEntity getPersonTargetInfo(Long id);

    /**
     * 删除指标
     * @param id
     * @return
     */
    boolean delete(Long id);

    /**
     * 指标分页
     * @param query
     * @param isUser 是否用户个人指标库
     * @return
     */
    PageInfo<HrPmTargetEntity> listTarget(TargetListQuery query,boolean isUser);

    /**
     * 指标导出
     * @param query
     * @return
     */
    ByteArrayOutputStream exportTarget(TargetExportQuery query);

    /**
     * 模板导出
     * @return
     */
    ByteArrayOutputStream templateExport();

    /**
     * 导入
     * @param inputStream
     */
    void importExcel(InputStream inputStream);


    /**
     * 批量更新 个人指标
     * @param list
     * @return
     */
    boolean batchUpdatePersonTarget(List<HrPmTargetEntity> list);


    /**
     * 修改指标状态
     * @param query
     * @return
     */
    boolean updateStatus(TargetUpdateQuery query);
}
